// lib/create.js


// import fs from 'fs'
// fs-extra 是对 fs 模块的扩展，支持 promise 语法
import fs from 'fs-extra'
import path from 'path'
import inquirer from 'inquirer';
import Generator from './Generator.js';

import { wrapLoading } from '../utils/utils.js'



export default async function (name, options) {
    // 执行创建命令
    // 当前命令行执行所在的目录
    const cwd = process.cwd();
    // 拼接 需要创建的目录地址
    const targetAir = path.join(cwd, name);
    // 目录是否已经存在？ 不存在就直接创建，存在则需要覆盖
    // fs.existsSync()方法用于同步检查给定路径中是​​否已存在文件。它返回一个布尔值，该值指示文件的存在。
    if (fs.existsSync(targetAir)) {
        // console.log('目录存在');
        // 是否为强制创建？
        if (options.force) {
            // fs.remove()函数将删除给定的文件或目录。目录内的所有文件都将被删除。如果给定的文件或目录不存在，该函数将不执行任何操作。
            await fs.remove(targetAir)
        } else {
            // 询问用户是否确定要覆盖
            let { action } = await inquirer.prompt([
                {
                    name: 'action',// key 名
                    type: 'list', //type： input, number, confirm, list, checkbox ... 
                    message: '目标目录已经存在，请选择操作:',
                    choices: [
                        {
                            name: '覆盖',
                            value: 'overwrite'
                        }, {
                            name: '取消',
                            value: false
                        }
                    ]
                }
            ])
            //取消操作
            if (!action) {
                return;
            } else if (action === 'overwrite') {
                //覆盖
                // 移除已存在的目录
                // console.log(`\r\nRemoving...`)
                // await fs.remove(targetAir);
                let fn = function () {
                    fs.remove(targetAir)
                }
                await wrapLoading(fn, {
                    success: 'Removal successful...',
                    fail: 'Removal failed...'
                });
            }
        }
    }

    // 创建项目
    const generator = new Generator(name);

    // 开始创建项目
    generator.create()
}